package com.zt.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zt.dto.CouponDistributionDto;
import com.zt.dto.UserQueryDto;
import com.zt.entity.Coupons;
import com.zt.entity.Result;
import com.zt.entity.Users;
import com.zt.vo.CouponDistributionStatsVO;

import java.util.List;

/**
 * 优惠券发放服务接口
 */
public interface CouponDistributionService {
    
    /**
     * 获取已激活的优惠券列表
     * @return 已激活的优惠券列表
     */
    List<Coupons> getActiveCoupons();
    
    /**
     * 分页查询用户列表
     * @param userQueryDto 查询条件
     * @return 用户分页数据
     */
    IPage<Users> getUserList(UserQueryDto userQueryDto);
    
    /**
     * 发放优惠券
     * @param distributionDto 发放信息
     * @return 发放结果
     */
    Result distributeCoupons(CouponDistributionDto distributionDto);
    
    /**
     * 检查用户是否已经拥有该优惠券
     * @param userId 用户ID
     * @param couponId 优惠券ID
     * @return 是否已拥有
     */
    boolean hasUserCoupon(Integer userId, Integer couponId);
    
    /**
     * 获取优惠券的已发放数量
     * @param couponId 优惠券ID
     * @return 已发放数量
     */
    Integer getCouponDistributedCount(Integer couponId);

    /**
     * 获取优惠券发放统计信息
     * @param couponId 优惠券ID
     * @return 发放统计信息
     */
    CouponDistributionStatsVO getCouponDistributionStats(Integer couponId);

    /**
     * 为新用户发放默认优惠券
     * @param userId 用户ID
     * @param defaultCouponId 默认优惠券ID
     * @return 发放结果
     */
    Result giveNewUserCoupon(Long userId, Integer defaultCouponId);
}
